﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace HospitalAdmision
{
    public partial class f_usuarioAdm : Form
    {
        //Crear objeto de tipo HospitalEntities
        ProyHospitalEntities hosEn;
        public f_usuarioAdm()
        {
            InitializeComponent();
        }

        private void f_usuario_Load(object sender, EventArgs e)
        {
            //Instanciar objeto de tipo HospitalEntities
            hosEn = new ProyHospitalEntities();

        }

        private void btn_buscar_Click(object sender, EventArgs e)
        {
            //Busca si el valor del textBox "txt_buscar" coincide con algun valor de la columna "Nombre" de la tabla Usuario
            Usuario us = hosEn.Usuario.FirstOrDefault(
                a => a.Nombre == txt_buscar.Text);
            //Si la busqueda produce resultados se asignan los datos encontrados a los controles del formulario
            if (us != null)
            {
                txt_nombre.Text = us.Nombre;
                txt_clave.Text = us.Clave;
                cb_modulo.Text = us.Modulo;
                String id = Convert.ToString(us.ID_usuario);
                txt_id.Text = id;
            }
            //Si la busqueda no produce resultados se mostrara un mensaje
            else
            {
                MessageBox.Show("El usuario no se encuentra en la Base de datos","Mensaje");
                Limpiar();
            }
        }

        private void btn_limpiar_Click(object sender, EventArgs e)
        {
            //llama a la función limpiar
            Limpiar();
        }
        //funcion para limpiar los controles del formulario
        public void Limpiar()
        {
            txt_buscar.Text = "";
            txt_clave.Text = "";
            txt_nombre.Text = "";
            cb_modulo.SelectedIndex = -1;
            txt_id.Text="";
        }

        private void btn_guardar_Click(object sender, EventArgs e)
        {
            //Si el formulario tiene un campo vacio muestra un mensaje
            if (txt_nombre.Text == "" || txt_clave.Text == "" || cb_modulo.SelectedIndex == -1)
            {
                MessageBox.Show("No hay nada que guardar","Mensaje");
                Limpiar();
            }
            else
            {
                // crear variable id para utilizarlo para buscar en la base de datos
                int id;
                //si el txt_id esta vacio se le asigna un cero para la busqueda
                if (txt_id.Text == "")
                {
                     id = 0;
                }
                else
                {
                     id = Convert.ToInt32(txt_id.Text);
                }
                //Busca si el valor de la variable "id" coincide con algun valor de la columna "id" de la tabla usuario
                Usuario actualizarUs = hosEn.Usuario.FirstOrDefault(
                   a=>a.ID_usuario==id);
                //Busca si el valor de del textBox "txt_nombre" coincide con algún valor de la columna "Nombre" de la tabla usuario
                Usuario us = hosEn.Usuario.FirstOrDefault(
                    a => a.Nombre == txt_nombre.Text);
                //Si encuentra algo los valores se actualizan previa confirmación
                if (actualizarUs != null)
                {
                    //pregunata si quiere actualizar los datos
                    if (MessageBox.Show("¿Desea Actualizar?", "Advertencia", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        actualizarUs.Nombre = txt_nombre.Text;
                        actualizarUs.Clave = txt_clave.Text;
                        actualizarUs.Modulo = cb_modulo.Text;
                        hosEn.SaveChanges();
                        MessageBox.Show("Datos Actualizados","Mensaje");
                        Limpiar();
                    }
                    else
                    {
                        // si selecciona no en el "MessageBox" se limpian los controles
                        Limpiar();
                    }
                }//si el nombre ya existe en la tabla usuario se muestra un mensaje de advertencia
                else if(us!=null)
                {
                    MessageBox.Show("El nombre de usuario ya existe", "Advertencia");
                }
                //Si no encuentra nada los valores se insertan
                else
                {
                    Usuario NuevoUs = new Usuario
                    {
                        Nombre = txt_nombre.Text,
                        Clave = txt_clave.Text,
                        Modulo = cb_modulo.Text
                    };
                    hosEn.Usuario.Add(NuevoUs);
                    hosEn.SaveChanges();
                    MessageBox.Show("Datos guardados","Mensaje");
                    Limpiar();
                }
            }
            
        }

        private void btn_eliminar_Click(object sender, EventArgs e)
        {
            //Si el formulario se encuentra tiene un campo vacio mandar mensaje
            if (txt_nombre.Text == "" || txt_clave.Text == "" || cb_modulo.SelectedIndex == -1)
            {
                MessageBox.Show("No hay nada que eliminar","Mensaje");
                Limpiar();
            }
            else
            {
                //Busca si el valor de la variable "idInt" coincide con algun valor de la columna "ID_usuario"
                Usuario eliminarUs = hosEn.Usuario.FirstOrDefault(
                    a => a.Nombre == txt_nombre.Text);
                if (eliminarUs != null)
                {
                    if (MessageBox.Show("Estas seguro de eliminar este registro?", "Advertencia", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        hosEn.Usuario.Remove(eliminarUs);
                        hosEn.SaveChanges();
                        MessageBox.Show("Datos Eliminados","Mensaje");
                        Limpiar();
                    }
                    else
                    {
                        Limpiar();
                    }
                }
            }
        }

        private void btn_inicioU_Click(object sender, EventArgs e)
        {
            //llama al formulario de inicio y cierra el formulario de usuario
            f_inicioAdm llamar = new f_inicioAdm();
            llamar.Show();
            llamar.Close();
            this.Close();
        }
    }
}
